package initialize

import (
	"fmt"
	"github.com/spf13/viper"
	"go.uber.org/zap"
	"kuangstudy-mall/apis/userrelation-web/global"
	"os"
)

/*
根据key读取系统环境变量的参数
*/
func GetSystemEnvConfig(key string) string {
	// 在系统启动的时候，会把系统变量的参数全部读取到内存中，方便给我使用
	viper.AutomaticEnv()
	// 你可以通过一些getXXX方法获取系统环境变量配置的参数
	return viper.GetString(key)
}

func InitializeConfig() {
	// 1: 初始化viper
	viper := viper.New()
	// 2： 读取配置所在的位置
	rootPath, err := os.Getwd()
	if err != nil {
		panic(err)
	}

	// 读取系统环境变量参数
	global.Env = *global.Args.Env
	if len(global.Env) == 0 {
		// 支持命令行参数的解析和处理
		global.Env = GetSystemEnvConfig("KSD_ENV")
	}
	// 3：设置配置文件所在的位置
	viper.AddConfigPath(rootPath + "/apis/userrelation-web/resources")
	viper.SetConfigName(fmt.Sprintf("application-%s.yaml", global.Env))
	viper.SetConfigType("yaml")
	if err := viper.ReadInConfig(); err != nil {
		panic(err)
	}

	// 解析
	if err := viper.Unmarshal(&global.ServerConfig); err != nil {
		zap.S().Errorf("解析配置文件失败!!!")
	}
	// 如果在生产阶段不想看到日志信息就是使用debug方法，否则就使用info
	zap.S().Infof("解析配置文件成功：%v", &global.ServerConfig)
}
